
/**
 * @author
 * @version 1.0
 * @created 24-abr-2013 13:04:34
 */

package Controladores;

import GestorCompeticion.Competicion;
import GestorCompeticion.CompeticionBD;
import GestorCompeticion.Participa;
import GestorCompeticion.ParticipaBD;
import GestorEquipos.Equipo;
import GestorEquipos.EquipoBD;
import GestorEquipos.Juega;
import GestorJornada.Jornada;
import GestorJornada.JornadaBD;
import GestorPartido.Partido;
import GestorPartido.PartidoBD;
import GestorJugadores.Estadistica;
import GestorJugadores.EstadisticaBD;
import GestorJugadores.Jugador;
import Interfaz.InterfazEstadisticas;
import Interfaz.InterfazCompeticion;
import Interfaz.InterfazJornada;
import Interfaz.InterfazPartido;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.SortedMap;
import java.util.TreeMap;

public class ControladorCompeticion {
	private static ControladorCompeticion Instancia=null;
        private Competicion[] competiciones;
        private Jornada[] jornadas;
        private Partido[] partidos;
        private int competicion_activa;
        private int jornada_activa=0;
        private int partido_activo=0;

	public ControladorCompeticion(){
            competiciones = null;
            competicion_activa = 0;
   
	}

	public static ControladorCompeticion getInstancia(){
            if (Instancia==null){
                Instancia = new ControladorCompeticion();
            }
        return Instancia;
	}

	/**
	 * 
	 * @param Competicion
	 */
	public Boolean addCompeticion(String[] competicion){
            
            Boolean salida= false;
            Competicion newcomp;
            
            if ( VerificarDatosCorrectosCompeticion(competicion) != false){ // Datos correctos
                // Enviar a la base de datos              
                newcomp = new Competicion(competicion[0], competicion[1].charAt(0),competicion[2]);
                
                // competicion añadida con exito
                if (CompeticionBD.getInstancia().addCompeticion(newcomp) != null){  
                    InterfazCompeticion.getInstancia().mostrarMensaje("COMPETICION CREADA CON EXITO","", 1);
                    salida = true;
                } else { // Error con la base de datos
                    InterfazCompeticion.getInstancia().mostrarMensaje("ERROR. COMPETICION NO CREADA", "ERROR", 0);                 
                }
            }else{
                InterfazJornada.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);
            
            } 
            return salida;
	}
        
        /**
	 * 
	 * @param ComCompeticion
	 * @param Categoria
	 * @param Sexo
	 */
	public Boolean consultarCompeticion(String[] Datos){
            
            Boolean salida=false;
            // array por si se devuelven varias competiciones en la consulta
            competiciones = CompeticionBD.getInstancia().getCompeticion(Datos[0], Datos[2], Datos[1]);
            if (competiciones.length > 0){ // Se han encontrado competiciones
                // MOSTRAR TODAS LAS COMPETICIONES ENCONTRADAS EN LA TABLA COMPETICIONES
                for(int i=0; i <competiciones.length; i++){
                    InterfazCompeticion.getInstancia().add_Competicion_Tabla(i,
                                competiciones[i].getNomCompeticion(), competiciones[i].getSexo().toString(),
                                        competiciones[i].getCategoria() );
                    }
                    // MOSTRAR LA 1º COMPETICION EN LA FICHA DE COMPETICION
                    InterfazCompeticion.getInstancia().mostrarCompeticion(
                            competiciones[0].getNomCompeticion(), competiciones[0].getSexo().toString(),
                                    competiciones[0].getCategoria());
                salida= true;
                
            } else { // No se ha encontrado competicion
                InterfazCompeticion.getInstancia().mostrarMensaje("COMPETICION NO ENCONTRADA", "ERROR", 0);
            }
            
            return salida;
	}
        
        /**
	 * 
	 * @param Competiciion
	 */
	public boolean modificarCompeticion(String[] Competicion){
            Competicion compt;
            Boolean salida= false;
            
            if(VerificarDatosCorrectosCompeticion(Competicion) != false){ // Datos correctos
                // Se completa la nueva Competicion con idCompeticion
                compt = new Competicion(Competicion[0],Competicion[1].charAt(0),Competicion[2]);
                compt.setIdCompeticion(competiciones[competicion_activa].getIdCompeticion());
                // Enviar a la BD
                if (CompeticionBD.getInstancia().updateCompeticion(compt) != null){
                    // Modificado con éxito
                    competiciones[competicion_activa] = compt;
                    InterfazCompeticion.getInstancia().mostrarMensaje("COMPETICION MODIFICADA CON EXITO","", 1);
                    salida= true;
                } else {
                    InterfazCompeticion.getInstancia().mostrarMensaje
                            ("COMPETICION NO MODIFICADA.\nIntentelo de nuevo.", "ERROR", 0);
                }
            }else{
                InterfazJornada.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);
            
            }
            
            return salida;
	}

	/**
	 * 
	 * @param Competiciion
	 */
	public boolean eliminarCompeticion(){
            
            Boolean salida= false;
            if(CompeticionBD.getInstancia().deleteCompeticion(competiciones[competicion_activa])) {
                InterfazJornada.getInstancia().mostrarMensaje("COMPETICION ELIMINADA CON EXITO", "", 1);
                salida = true;
            }else{
               InterfazJornada.getInstancia().mostrarMensaje("COMPETICION NO ELIMINADA", "ERROR", 0);
            }
            
            return salida;
	}


	/**
	 * 
	 * @param Competicion
	 */
	public Boolean VerificarDatosCorrectosCompeticion(String[] competicion){
 
            Boolean error_nomComp = false, error_categ = false, error_sexo = false, salida=false;
        
            if (competicion[0].length() == 0 || competicion[0].length() > 20 ){
                error_nomComp = true;
            }
            if(competicion[1] != null) {
                if (competicion[1].charAt(0) != 'M' && competicion[1].charAt(0) != 'F') {
                    error_sexo = true;
                }
            }else {
                error_sexo = true;
            }
            ArrayList<String> cat = new ArrayList<String>
                    (Arrays.asList ("BENJAMIN", "ALEVIN", "INFANTIL", "JUNIOR", "CADETE"));
            if (! cat.contains(competicion[2].toUpperCase())){
                error_categ = true;
            }
            
            if (!error_nomComp && !error_categ && !error_sexo){
                //InterfazJornada.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);
                salida = true;
            }
            return salida;
	}

        
        
//******************************************************************************

	/**
	 * 
	 * @param jornada
	 */
	public boolean addJornada(String[] jornada){

            Boolean salida = false;
            
            if ( VerificarDatosCorrectosJornada(jornada) != false ){ // Datos correctos
                // Enviar a la base de datos
                Jornada newJorn = new Jornada(competiciones[competicion_activa].getIdCompeticion(),
                                            Integer.parseInt(jornada[0]) );
                
                if (JornadaBD.getInstancia().addJornada(newJorn) != null){  // jornada añadida con exito
                    InterfazJornada.getInstancia().mostrarMensaje("JORNADA CREADA CON EXITO","", 1);
                    salida =  true;
                    
                } else { // Error con la base de datos
                    InterfazJornada.getInstancia().mostrarMensaje("JORNADA NO CREADA", "ERROR", 0);
                }
            }else{
                InterfazJornada.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);                
            }
            
            return salida;
	}

 	/**
	 * 
	 * @param IdCampeonato
	 * @param NumJornada
	 */
	public Boolean consultarJornada(String[] Datos){ //Integer NumJornada

            Integer IdJornada, IdCampeonato = competiciones[competicion_activa].getIdCompeticion();
            try {IdJornada = Integer.parseInt(Datos[0]);} catch(NumberFormatException e){IdJornada=-1;}
            
            jornadas = JornadaBD.getInstancia().getJornada(IdCampeonato, IdJornada);
                       
            if (jornadas != null){ // Si se han encontrado competiciones
                // MOSTRAR TODAS LAS JORNADAS ENCONTRADAS EN LA TABLA JORNADAS
                for(int i=0; i <jornadas.length; i++){
                   InterfazJornada.getInstancia().add_Jornada_fila(i,jornadas[i].getNumJornada().toString());
                }  
                    // MOSTRAR LA 1º JORNADA EN LA FICHA DE JORNADA
                    InterfazJornada.getInstancia().mostrarJornada(
                            jornadas[0].getNumJornada());
                
                return true;
                
            } else { // No se ha encontrado competicion
                //InterfazJornada.getInstancia().mostrarMensaje("JORNADA NO ENCONTRADA", "ERROR", 0);
                return false;
            }

             
	}       
        
	/**
	 * 
	 * @param Datos
	 */
	public boolean modificarJornada(String[] Datos){
             
            Boolean salida=false;
            if (VerificarDatosCorrectosJornada(Datos) != false){ // Datos correctos
                
                // Se completa la nueva Jornada con idJornada  y se envia a la BD
                jornadas[jornada_activa].setNumJornada(Integer.parseInt(Datos[0]));
                if (JornadaBD.getInstancia().updateJornada(jornadas[jornada_activa])){
                    
                    // Modificado con éxito
                    InterfazJornada.getInstancia().mostrarMensaje("JORNADA MODIFICADA CON EXITO","", 1);
                    salida = true;
                } else {
                    InterfazJornada.getInstancia().mostrarMensaje("JORNADA NO MODIFICADA.\nIntentelo de nuevo.",
                                                                        "Error en la Base de Datos", 0);
                }
            }else{
                InterfazJornada.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);                
            }
            
            return salida;
	}        
        
 	/**
	 * 
	 * @param Jornada
	 */
	public boolean eliminarJornada(){

            boolean salida = false;

            if(JornadaBD.getInstancia().deleteJornada(jornadas[jornada_activa])) {
                InterfazJornada.getInstancia().mostrarMensaje("JORNADA ELIMINADA CON EXITO", "", 1);
                salida = true;
            }else{
                InterfazJornada.getInstancia().mostrarMensaje("JORNADA NO ELIMINADA", "ERROR", 0);
            }
            
            return salida;
	}
        
	/**
	 * 
	 * @param Datos
	 */
	public Boolean VerificarDatosCorrectosJornada(String[] Datos){
            
            try {
                if(Integer.parseInt(Datos[0]) > 0) {
                    return false;
                }
            }catch (NumberFormatException e){
                return false;
            }
            return true;
	}
        
        
//****************************************************************************        
	/**
	 * 
	 * @param Datos
	 */
	public boolean addPartido(String[] Datos){
            
            Boolean salida= false;
            Integer id_local=null, id_visitante=null;
            String cat = competiciones[competicion_activa].getCategoria();
            Character s = competiciones[competicion_activa].getSexo();
             Partido newPart;  
            if (VerificarDatosCorrectosPartido(Datos)){ // Datos correctos
                //Comprobar si los nombres de los equipos están guardados y obtener sus ids
                Date fecha=null;// se vuelve a convertir fecha a date, despues de la comprobacion
                try {fecha = new SimpleDateFormat("yyyy-MM-dd").parse(Datos[3]);
                } catch (ParseException ex) { /* no hay excepcion ya que se ha comprobado antes con el metodo VerificarDatos... */
                    //System.out.println(ex);
                }
  
               if(!EquipoBD.getIntance().getEquipos(Datos[0], cat, s.toString(),"").isEmpty()){
                     id_local = EquipoBD.getIntance().getEquipos(Datos[0], cat, s.toString(),"").get(0).getIdEquipo();
                }
                if(!EquipoBD.getIntance().getEquipos(Datos[1], cat, s.toString(),"").isEmpty()){
                    id_visitante = EquipoBD.getIntance().getEquipos(Datos[1], cat, s.toString(),"").get(0).getIdEquipo();
                }
                if(ParticipaBD.getInstancia().getParticipa(id_local,
                        competiciones[competicion_activa].getIdCompeticion())!=null && 
                        ParticipaBD.getInstancia().getParticipa(id_visitante,
                        competiciones[competicion_activa].getIdCompeticion())!=null){
                    //String[] buscaLocal = {Datos[0],"",Datos[2],Datos[3]};
                    //String[] buscaVisit = {Datos[1],"",Datos[2],Datos[3]};
                    //if(this.consultarPartido(buscaLocal)){
                    //    if(this.consultarPartido(buscaVisit)){
                        newPart = new Partido(jornadas[jornada_activa].getIdJornada(),
                                                    id_local, id_visitante, Datos[2], fecha);

                        // Enviar a la base de datos
                        if (PartidoBD.getInstancia().addPartido(newPart) != null){  // partido añadido con exito
                            InterfazPartido.getInstancia().mostrarMensaje("PARTIDO CREADO CON EXITO","", 1);
                            salida =  true;
                        } else { // Error con la base de datos
                            InterfazPartido.getInstancia().mostrarMensaje("PARTIDO NO CREADO", "ERROR", 0);
                        }
                   //    }else{
                   //     InterfazPartido.getInstancia().mostrarMensaje("EL EQUIPO VISITANTE\n YA TIENEN ASIGNADO OTRO PARTIDO EN ESTA JORNADA", "ERROR", 0);                               
                   // }
                   // }else{
                   //     InterfazPartido.getInstancia().mostrarMensaje("EL EQUIPO LOCAL\n YA TIENEN ASIGNADO OTRO PARTIDO EN ESTA JORNADA", "ERROR", 0);                               
                   // }
                }else{
                    InterfazPartido.getInstancia().mostrarMensaje("UNO O AMBOS EQUIPOS NO PERTENECEN A LA COMPETICION", "ERROR", 0);                
                }
            }else{
                InterfazPartido.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);                
            }
            
            return salida;
	}


       public Boolean consultarPartido(String[] Datos) { //Integer NumJornada, String NomLocal, String NomVisitante, Date fecha){
           
            Boolean salida = false;
            String cat = competiciones[competicion_activa].getCategoria();
            Character s = competiciones[competicion_activa].getSexo();

            Integer id_local = null, id_visitante=null;
            String resultado=(Datos[2].equals("") ? null:Datos[2]), fechaPartido=Datos[3],
                    nombreLocal=(Datos[0].equals("") ? null:Datos[0]), nombreVisit=(Datos[1].equals("") ? null:Datos[1]);
            if(nombreLocal != null){id_local=EquipoBD.getIntance().consultarIdEquipo(Datos[0], cat, s);}
            if(nombreVisit != null){id_visitante=EquipoBD.getIntance().consultarIdEquipo(Datos[1], cat, s);}
            //System.out.println(nombreLocal+"\t"+id_local);
            //System.out.println(nombreVisit+"\t"+id_visitante);
            partidos = PartidoBD.getInstancia().getPartido
                    (jornadas[jornada_activa].getIdJornada(), id_local, id_visitante, resultado, fechaPartido);

            if (partidos.length>0){ // Si se ha encontrado partido(s) <<---
               
                 // MOSTRAR TODAS LAS JORNADAS ENCONTRADAS EN LA TABLA JORNADAS
                for(int i=0; i <partidos.length; i++){
                    String nomLocal = EquipoBD.getIntance().getEquipo(partidos[i].getIdLocal()).getNombre();
                    String nomVisitante = EquipoBD.getIntance().getEquipo(partidos[i].getIdVisitante()).getNombre();
                    resultado = partidos[i].getResultado();
                    fechaPartido= partidos[i].getFecha().toString();
                    InterfazPartido.getInstancia().add_Partido_Tabla(i,nomLocal,nomVisitante,resultado,fechaPartido);
                    // MOSTRAR LA 1º JORNADA EN LA FICHA DE JORNADA
                    if(i==0)
                    InterfazPartido.getInstancia().mostrarPartido(nomLocal,nomVisitante,resultado,partidos[0].getFecha());
                }

                salida= true;
            }
            
            return salida;
	}        
        
 	/**
	 * 
	 * @param Datos
	 */
	public boolean modificarPartido(String[] Datos){
            
            Boolean salida = false;
            String cat = competiciones[competicion_activa].getCategoria();
            Character s = competiciones[competicion_activa].getSexo();
            Integer id_local=null, id_visitante=null;
            
            if(!EquipoBD.getIntance().getEquipos(Datos[0], cat, s.toString(), "").isEmpty())
                 id_local = EquipoBD.getIntance().getEquipos(Datos[0], cat, s.toString(),"").get(0).getIdEquipo();
            if(!EquipoBD.getIntance().getEquipos(Datos[1], cat, s.toString(),"").isEmpty())
                 id_visitante = EquipoBD.getIntance().getEquipos(Datos[1], cat, s.toString(),"").get(0).getIdEquipo();
            //System.out.println("Local: "+id_local+" Visit: "+id_visitante );

            if (VerificarDatosCorrectosPartido(Datos)){ // Datos correctos
          
                Date fecha=null;
                try {fecha = new SimpleDateFormat("yyyy-mm-dd").parse(Datos[3]);
                } catch (ParseException ex) { }
           
                Partido newPart = new Partido(jornadas[jornada_activa].getIdJornada(),
                        id_local, id_visitante, Datos[2], fecha);
                
                // Se completa el nuevo partido con IdPartido
                newPart.setIdPartido(partidos[partido_activo].getIdPartido());
                // Enviar a la BD
                if (PartidoBD.getInstancia().updatePartido(newPart)){
                    // Modificado con éxito
                    partidos[partido_activo] = newPart;
                    InterfazPartido.getInstancia().mostrarMensaje("PARTIDO MODIFICADO CON EXITO","", 1);
                    salida= true;
                } else {
                    InterfazPartido.getInstancia().mostrarMensaje("PARTIDO NO MODIFICADO", "ERROR", 0);
                }
            }else{
                InterfazPartido.getInstancia().mostrarMensaje("LOS DATOS NO SON CORRECTOS", "ERROR", 0);                
            }
            
            return salida;
	}       

	/**
	 * 
	 * @param Partido
	 */
	public boolean eliminarPartido(){
            
            boolean salida = false;
            
            if(PartidoBD.getInstancia().deletePartido(partidos[partido_activo])){
                InterfazPartido.getInstancia().mostrarMensaje("PARTIDO ELIMINADO CON EXITO", "", 1);
                salida = true;
            }
            
            return salida;
	}
	/**
         * IdJornada=Id_Jornada;
                IdLocal=Id_Local;
                IdVisitante=Id_Visitante;
                Resultado=Result;
                Fecha=Date;
                IdPartido=-1;
	 * 
	 * @param Datos
	 */
	public boolean VerificarDatosCorrectosPartido(String[] Datos){

            String delimitador = "-";
            String[] temp=null;
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            
            if (Datos[0].length()==0 || Datos[0].length()>50) {
                return false;
            }
            if (Datos[1].length()==0 || Datos[1].length()>50) {
                return false;
            }           
            try {
                formatter.parse(Datos[3]);
            } catch (ParseException ex) {
                return false;
            }
            if(!Datos[2].equals("")){
                if (Datos[2].contains(delimitador)){
                    temp = Datos[2].split(delimitador);
                    temp[0] = temp[0].trim();
                    temp[1] = temp[1].trim();
                    Integer scorelocal=null,scoreVisit=null ;
                    try{
                         scorelocal =Integer.parseInt(temp[0]); 
                         scoreVisit = Integer.parseInt(temp[1]);
                    }catch(NumberFormatException nfe){}
                    if(scorelocal == scoreVisit) {
                        return false;
                    }
               }else{return false;}
            }
            
            if(Datos[0].equals(Datos[1])){
                return false;
            }
            return true;
	}

        
//******************************************************************************        

	/**
	 * 
	 * @param Estadisticas
	 */
	public boolean addActa(String[] Estadisticas){
		return false;
	}


	/**
	 * 
	 * @param Estadisticas
	 */
	public boolean consultarActa(Integer partidoSeleccionado){

            Integer idPartido = this.partidos[partido_activo].getIdPartido();
            Equipo local = EquipoBD.getIntance().getEquipo(partidos[partido_activo].getIdLocal());
            Equipo visitante = EquipoBD.getIntance().getEquipo(partidos[partido_activo].getIdVisitante());
            ArrayList <Juega> plantillaLocal = EquipoBD.getIntance().getJugadores_Asignados(local);
            ArrayList <Juega> plantillaVisit = EquipoBD.getIntance().getJugadores_Asignados(visitante);
            
            if(! plantillaLocal.isEmpty()){// Si se ha encontrado plantilla  <<---
                // MOSTRAR TODOS LOS JUGADORES ENCONTRADAS EN LA TABLA JUGADORES LOCALES
                int i=0;
                for(Juega j: plantillaLocal){ // para todos los dorsales encontrados
                    String nomJugador =  j.getJugador().getNombre();//local.getPlantilla().get(d).getNombre();
                    String apellidosJugador = j.getJugador().getApellidos();//local.getPlantilla().get(d).getApellidos();
                    Integer dorsalJugador = j.getDorsal();
                   InterfazPartido.getInstancia().add_JugadoresLocal_Tabla(i,nomJugador,apellidosJugador,dorsalJugador);
                   if(i==0)
                       // OBTENER LAS 1º ESTADISTICAS EN LA FICHA DEL ACTA
                        EstadisticaBD.getInstancia().getEstadística(j.getJugador().getIdJugador(), idPartido);
                   i++;
                }
                
            }
           if(! plantillaVisit.isEmpty()){// Si se ha encontrado plantilla  <<---
                // MOSTRAR TODOS LOS JUGADORES ENCONTRADAS EN LA TABLA JUGADORES LOCALES
                int i=0;
                for(Juega j: plantillaVisit){ // para todos los dorsales encontrados
                    String nomJugador =  j.getJugador().getNombre();//local.getPlantilla().get(d).getNombre();
                    String apellidosJugador = j.getJugador().getApellidos();//local.getPlantilla().get(d).getApellidos();
                    Integer dorsalJugador = j.getDorsal();
                   InterfazPartido.getInstancia().add_JugadoresLocal_Tabla(i,nomJugador,apellidosJugador,dorsalJugador);
                   if(i==0)
                       // OBTENER LAS 1º ESTADISTICAS EN LA FICHA DEL ACTA
                        EstadisticaBD.getInstancia().getEstadística(j.getJugador().getIdJugador(), idPartido);
                   i++;
                }
                
            } 
           // MOSTRAR LAS 1º ESTADISTICAS EN LA FICHA DEL ACTA
           //InterfazPartido.getInstancia().mostrarEstadisticas()                
                return false;
	}

	/**
	 * 
	 * @param Estadisticas
	 */
	public boolean modificarActa(String[] Estadisticas){
		return false;
	}

	/**
	 * 
	 * @param Estadisticas
	 */
/* ****	public boolean deleteEstadisticas(String[] Estadisticas){
		return false;
	}*/ //¿Y el diagrama de secuencia?

	/**
	 * 
	 * @param Estadisticas
	 */
	public Boolean VerficiarDatosEstadisticas(String[] Datos){

            try{
                if (Integer.parseInt(Datos[0]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[1]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[2]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[3]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[4]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[5]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[6]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[7]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[8]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[9]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[10]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[11]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[12]) < 0) {
                    return false;
                }
                if (Integer.parseInt(Datos[13]) < 0) {
                    return false;
                }
            }catch (NumberFormatException e){
                return false;
            }

            return true;
	}

//******************************************************************************        
        /**
	 * 
	 * @param Datos
	 */
	public boolean addParticipa(String[] Datos){
            
            Boolean salida = false;
            Integer IdEquipo = null;
            Integer IdCompt = competiciones[competicion_activa].getIdCompeticion();
            if(!EquipoBD.getIntance().getEquipos(Datos[0], Datos[2], Datos[1],Datos[3]).isEmpty()) {
                IdEquipo = EquipoBD.getIntance().getEquipos(Datos[0], Datos[2], Datos[1],Datos[3]).get(0).getIdEquipo();

                Participa part = new Participa(IdEquipo, IdCompt);
                if(ParticipaBD.getInstancia().addParticipa(part) != null) {
                    InterfazCompeticion.getInstancia().mostrarMensaje("EQUIPO AÑADIDO A COMPETICION CON EXITO","",1);                 
                    salida = true;
                }else{
                    InterfazCompeticion.getInstancia().mostrarMensaje("EQUIPO NO AÑADIDO A COMPETICION","ERROR",0); 
                }
            }
             return salida;
	}
        /**
	 * 
	 * @param Datos
	 */
	public boolean deleteParticipa(String[] Datos){
            
            Boolean salida = false;
            
            Integer IdEquipo = null;
            Integer IdCompt = competiciones[competicion_activa].getIdCompeticion();
                if(!EquipoBD.getIntance().getEquipos(Datos[0], Datos[2], Datos[1], Datos[3]).isEmpty()) {
                    IdEquipo = EquipoBD.getIntance().getEquipos(Datos[0], Datos[2], Datos[1], Datos[3]).get(0).getIdEquipo();

                    Participa part = new Participa(IdEquipo, IdCompt);
                    if(ParticipaBD.getInstancia().deleteParticipa(part) != false) {
                        InterfazCompeticion.getInstancia().mostrarMensaje("EQUIPO ELIMINADO DE COMPETICION CON EXITO","",1);                 
                        salida = true;
                    }else{
                        InterfazCompeticion.getInstancia().mostrarMensaje("EQUIPO NO ELIMINANDO DE COMPETICION","ERROR",0); 
                    }
                }            

            return salida;
	}
        
	/**
	 * 
	 * @param IdEquipo
	 * @param IdCompeticion
	 */
        public Participa[] getParticipa(Integer IdEquipo, Integer IdCompeticion){
		return null;
	}        
	/**
	 * 
	 * @param Participa
	 */
	public boolean updateParticipa(String[] Participa){
		return false;
	}
        
        
        public void actualizarCompeticionActiva(int num){
           
            this.competicion_activa=num;
           
        }
         public void actualizarJornadaActiva(int num){
            this.jornada_activa=num;
        }
         public void actualizarPartidoActivo(int num){
            this.partido_activo=num;
        }

    public void listarEquiposActivos() {
        String est; Integer fila =0;
        List<Equipo> al = EquipoBD.getIntance().getEquipos("",
                        competiciones[competicion_activa].getCategoria(), 
                        competiciones[competicion_activa].getSexo().toString(),"activo");
        
        Equipo[] equipos = al.toArray(new Equipo[al.size()]);
        
        if (equipos.length > 0){ // Se han encontrado competiciones

            for(int i=0; i <equipos.length; i++){

                if(ParticipaBD.getInstancia().getParticipa(equipos[i].getIdEquipo(),
                            competiciones[competicion_activa].getIdCompeticion())== null){
                        
                        if(equipos[i].getEstado()) {
                            est ="activo";
                        }
                        else {
                            est= "baja";
                        }
                        //System.out.println("equipo no participa:"+equipos[i].getNombre());
                        InterfazCompeticion.getInstancia().add_Equipo_Tabla(fila,
                                    equipos[i].getNombre(), equipos[i].getGenero().toString(),
                                            equipos[i].getCategoria(), est );
                        fila++;
                }
            }

        }
    }
    
    public void listarEquiposEnCompeticion(){
        String est; Integer fila=0;
        List<Equipo> al = EquipoBD.getIntance().getEquipos("",
                        competiciones[competicion_activa].getCategoria(), 
                        competiciones[competicion_activa].getSexo().toString(),"activo");
        
        Equipo[] equipos = al.toArray(new Equipo[al.size()]);
         if (equipos.length > 0){ // Se han encontrado competiciones
                
                for(int i=0; i <equipos.length; i++){

                    if(ParticipaBD.getInstancia().getParticipa(equipos[i].getIdEquipo(),
                            competiciones[competicion_activa].getIdCompeticion())!= null){
                        
                        if(equipos[i].getEstado()) {
                            est ="activo";
                        }
                        else {
                            est= "baja";
                        }
                        InterfazCompeticion.getInstancia().add_Equipo_Tabla(fila,
                                    equipos[i].getNombre(), equipos[i].getGenero().toString(),
                                            equipos[i].getCategoria(), est );
                        fila ++;
                    }
                }

            }
    
    }
    
    
    public Boolean getClasificacion(String[] Datos){
        
        //CompeticionBD.getInstancia().getClasificacion(Comp);
        
        return null;
    
    }

    public void getClasificacion() {
        
        List<Partido> Lpartidos=new ArrayList<Partido>();   // lista de todos los partidos (en todas las jornadas) de la competicion
        String[] jornada= {""};   // para consultar todas las jornadas
        consultarJornada(jornada);  //actualizar this.jornadas
        //System.out.println(jornadas.length);
        for (int i=0; i< jornadas.length;i++) {
            Partido[] p =PartidoBD.getInstancia().getPartido
                    (jornadas[i].getIdJornada(), null, null, null, null);
            //if (p.length>0)System.out.println("Partido numero "+p[0].getIdPartido());
            if(p.length>0) Lpartidos.addAll(Arrays.asList(p));
        }
        
        Map<Integer, Integer> clasificacioon = sortByValue(CompeticionBD.getInstancia().getClasificacion(Lpartidos));
        int posicion =0;
        for (Integer key : clasificacioon.keySet()) { 
            //System.out.println(" Puntos: "+sortedMap.get(key1) +" IdGanador: "+key1);
            String nombre = EquipoBD.getIntance().getEquipo(key).getNombre();
            InterfazCompeticion.getInstancia().add_Clasificacion_Tabla(posicion, nombre, clasificacioon.get(key));
           posicion++;     
        }

    }

    static Map sortByValue(Map map) {
        List list = new LinkedList(map.entrySet());
        Collections.sort(list, new Comparator() {
             public int compare(Object o1, Object o2) {
                  return ((Comparable) ((Map.Entry) (o2)).getValue())
                 .compareTo(((Map.Entry) (o1)).getValue());
             }
        });

       Map result = new LinkedHashMap();
       for (Iterator it = list.iterator(); it.hasNext();) {
           Map.Entry entry = (Map.Entry)it.next();
           result.put(entry.getKey(), entry.getValue());
       }
       return result;
    } 
}
